//+------------------------------------------------------------------+
//|                                                EqualFunction.mqh |
//|                             Copyright 2000-2025, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#include <Generic/Interfaces/IEqualityComparable.h>  // 相等性可比较接口（支撑自定义类型的灵活相等判断）

//+------------------------------------------------------------------+
//| 泛型相等性判断函数：判断两个同类型对象是否相等，支持基础类型与自定义类型 |
//| 核心逻辑（优先级从高到低）：                                     |
//|  1. 优先使用自定义相等逻辑：若对象实现 IEqualityComparable<T> 接口，调用其自定义的 Equals 方法； |
//|  2.  fallback 到默认相等逻辑：若未实现接口，使用编程语言原生的“==”运算符进行比较； |
//| 核心特性：                                                      |
//|  1. 类型通用性：支持所有 MQL5 基础类型（int/double/string 等）与实现 IEqualityComparable<T> 的自定义类型； |
//|  2. 逻辑灵活性：既支持“开箱即用”的基础类型比较，又允许自定义类型通过接口重写相等规则； |
//|  3. 无侵入性：无需修改类型源码，仅需让自定义类型实现接口即可扩展相等逻辑； |
//| 适用场景：所有需要“统一相等性判断逻辑”的场景，避免因类型差异导致的比较规则混乱，典型如： |
//|  - 通用集合去重（如 ArrayList/HashSet 中判断元素是否重复，统一调用此函数）； |
//|  - 自定义类型相等校验（如判断两个“订单对象”是否为同一订单，需按订单号而非内存地址比较）； |
//|  - 跨类型比较工具封装（如开发通用验证工具，支持任意类型的相等性检查）； |
//|  - 避免“==”运算符局限性（如默认“==”对自定义类型可能比较内存地址，通过接口可实现按业务字段比较）； |
//+------------------------------------------------------------------+
template<typename T>
bool Equals(
    T x,  // [in] 待比较的第一个对象（类型与泛型参数 T 一致，可为基础类型或自定义类型）
    T y   // [in] 待比较的第二个对象（类型与泛型参数 T 一致，需与 x 同类型）
);
//+------------------------------------------------------------------+